package com.his.mapper;

import com.his.entity.Article;
import com.his.entity.HisUser;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * (HisUser)表数据库访问层
 *
 * @author makejava
 * @since 2020-10-23 18:09:50
 */
public interface HisUserMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    HisUser queryById(Integer id);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param hisUser 实例对象
     * @return 对象列表
     */
    List<HisUser> queryAll(HisUser hisUser);

    /**
     * 新增数据
     *
     * @param hisUser 实例对象
     * @return 影响行数
     */
    int insert(HisUser hisUser);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<HisUser> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<HisUser> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<HisUser> 实例对象列表
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("entities") List<HisUser> entities);

    /**
     * 修改数据
     *
     * @param hisUser 实例对象
     * @return 影响行数
     */
    int update(HisUser hisUser);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * 登录方法
     * @param user 尝试登录的用户
     * @return 返回登录后的用户信息,为空代表没有找到该用户
     */
    HisUser login(HisUser user);


    @Select("select count(*) from his_user where account=#{account}")
    int queryByAccount(String account);

    /**
     * 高级检索
     * @param word 检索的关键字
     * @return 检索结果
     */
    List<HisUser> superSearch(String word);

    /**
     *根据科室id查询该科室下所有的用户
     * @param id 部门id
     * @return 用户集合
     */
    @Select("select h.id,h.real_name,h.account from his_user h,dep_his_user d where h.id=d.his_user_id and d.dep_id=#{id}")
    List<HisUser> getByDepId(Integer id);

    /**
     * 添加用户和部门表
     * @param id 用户id
     * @param depId 部门id
     */
    @Insert("insert into dep_his_user values(null,#{depId},#{id})")
    void addDepAndUser(@Param("id") Integer id,@Param("depId") Integer depId);

    /**
     * 修改用户的部门表
     * @param id 用户id
     * @param depId 部门id
     */
    @Update("update dep_his_user set dep_id=#{depId} where his_user_id=#{userId}")
    void updateDepUser(@Param("userId") Integer id, @Param("depId") Integer depId);

    /**
     * 获取医生列表
     * @return
     */
    List<HisUser> selectDoctorList();

    /**
     * 根据科室id和角色id查询医院人士列表
     * @param depId 科室id
     * @param roleId 角色id
     * @return 医院人员列表
     */
    List<HisUser> getByDepIdAndRole(@Param("depId") String depId,@Param("roleId") String roleId);

    @Insert("insert into document (title,content) values (#{title},#{content})")
    int addArticle(Article a);

    @Select("select * from document")
    List<Article> getArticle();
}
